package org.example;
abstract class Vehicle {
    private String id; // 编号
    private String model; // 型号
    private String driver; // 运货负责人

    public Vehicle(String id, String model, String driver) {
        this.id = id;
        this.model = model;
        this.driver = driver;
    }

    // 抽象运输方法
    public abstract void transport();

    // Getter 和 Setter 方法
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }
}

// 保养接口
interface Maintenance {
    void performMaintenance(); // 保养方法
}

// 专用运输车类，继承交通工具类并实现保养接口
class SpecialTransportVehicle extends Vehicle implements Maintenance {
    public SpecialTransportVehicle(String id, String model, String driver) {
        super(id, model, driver);
    }

    // 实现抽象运输方法
    @Override
    public void transport() {
        System.out.println(getDriver() + " 正在驾驶编号为 " + getId() + " 的 " + getModel() + " 发送货物！");
        System.out.println("运输进行中。。。");
    }

    // 实现保养方法
    @Override
    public void performMaintenance() {
        System.out.println("货物运输车辆保养完毕！");
    }
}

// 快递任务类
class ExpressTask {
    private String expressNumber; // 快递单号
    private double weight; // 货物重量

    public ExpressTask(String expressNumber, double weight) {
        this.expressNumber = expressNumber;
        this.weight = weight;
    }

    // 运输前方法
    public void preTransport() {
        System.out.println("订单开始处理，仓库验货中。。。");
        System.out.println("货物重量：" + weight + "kg");
        System.out.println("货物检验完毕！");
        System.out.println("货物填装完毕！");
        System.out.println("运货人已通知！");
        System.out.println("快递单号：" + expressNumber);
        System.out.println("====================");
    }

    // 运输中方法
    public void duringTransport(GPSDevice gpsDevice) {
        System.out.println("货物运输中。。。");
        System.out.println("货物当前的坐标为：" + gpsDevice.getLocation());
        System.out.println("====================");
    }

    // 运输后方法
    public void postTransport() {
        System.out.println("货物运输任务已完成！");
    }

    // Getter 和 Setter 方法
    public String getExpressNumber() {
        return expressNumber;
    }

    public void setExpressNumber(String expressNumber) {
        this.expressNumber = expressNumber;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }
}

// GPS 接口
interface GPSDevice {
    String getLocation(); // 获取位置方法
}

// Phone 类，实现 GPS 接口
class Phone implements GPSDevice {
    private String location;

    public Phone(String location) {
        this.location = location;
    }

    // 实现获取位置方法
    @Override
    public String getLocation() {
        return location;
    }

    // Setter 方法
    public void setLocation(String location) {
        this.location = location;
    }
}

// 测试类
public class Task02 {
    public static void main(String[] args) {
        // 创建专用运输车对象
        SpecialTransportVehicle vehicle = new SpecialTransportVehicle("z025", "大奔", "小韩");

        // 创建快递任务对象
        ExpressTask expressTask = new ExpressTask("HYX600235", 76.34);

        // 创建 Phone 对象（作为 GPS 设备）
        Phone phone = new Phone("193,485");

        // 执行运输前操作
        expressTask.preTransport();

        // 执行运输操作
        vehicle.transport();

        // 执行运输中操作
        expressTask.duringTransport(phone);

        // 执行运输后操作
        expressTask.postTransport();

        // 输出运输车归还信息
        System.out.println(vehicle.getDriver() + " 所驾驶的编号为 " + vehicle.getId() + " 的 " + vehicle.getModel() + " 已归还！");

        // 对运输车进行保养
        vehicle.performMaintenance();

    }
}
